const json = require('koa-json')
const logger = require('koa-logger')
const path = require('path')
const staticFile = require('koa-static')
import Koa from 'koa'
import seq from './db/seq'
import koaJwt from 'koa-jwt'
import { noauthPath, secret } from './config/constant'
import errorHandle from './middlewares/errorHandle'
import koaBody from 'koa-body'
import useRoutes from './routes'
import verifyToken from './middlewares/verifyToken'
import User from './db/models/User'
import Blog from './db/models/Blog'

const app = new Koa()
// error handler
//jwt
app.use(errorHandle)

//jwt设置为如果是不需要鉴权就能访问的路由和获取静态资源则不需要token认证
app.use(koaJwt({ secret }).unless({ path: noauthPath }))
app.use(
  staticFile(
    path.join(__dirname, '../public/'), // 开放的文件夹 __dirname为当前运行文件的目录  目前看来 只能开放文件夹 无法开放单独一个文件
    {
      index: false, // 默认为true  访问的文件为index.html  可以修改为别的文件名或者false
      hidden: false, // 是否同意传输隐藏文件
      defer: true // 如果为true，则在返回next()之后进行服务，从而允许后续中间件先进行响应
    }
  )
)
// middlewares
app.use(verifyToken)
app.use(
  koaBody({
    multipart: true, // 支持多个文件上传
    formidable: {
      //文件保存的位置
      maxFileSize: 5200000, //5.2mb
      uploadDir: path.join(__dirname, '../public/static'),
      //保留文件后缀名
      keepExtensions: true
    }
  })
)
app.use(json())
app.use(logger())
app.use(errorHandle)

// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = Number(new Date()) - Number(start)
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

// 批量注册路由
useRoutes(app)
app.on('error', (err) => {
  console.log(err)
})
//同步数据库
;(async function () {
  try {
    await seq.authenticate()
    await seq.sync({ force: false, alter: false })
    // for (let i = 0; i < 100; i++) {
    //   await Blog.create({ content: `测试博客数据${i}`, user_id: 1 })
    // }
    //创建一个测试用例
    await User.create({ userName: 'admin', password: '12345678', nickName: 'hahah', email: '2829648728@qq.com' })
  } catch (error) {
    console.log('连接失败:' + error)
  }
})()

export default app
